/*
* Copyright 2008  Rice University
* All Rights Reserved
* 
*       Created by Erion Plaku, Lydia Kavraki
*       Physical and Biological Computing Group
*       Department of Computer Science
*       Rice University
*/

/**
*@file Workspace3D.H
*@author Erion Plaku 
*        [email to plakue@cs.rice.edu for questions or to report errors]
*@brief Workspace consists of a collection of 3D static and moving
*       parts 
*/

#ifndef OOPSMP_UTILS_GEOMETRY_WORKSPACE_ARTICULATED_WORKSPACE3D_H_
#define OOPSMP_UTILS_GEOMETRY_WORKSPACE_ARTICULATED_WORKSPACE3D_H_

#include "OOPSMP/Utils/Geometry/Workspace/Workspace.H"
#include "OOPSMP/Utils/Geometry/Workspace/ArticulatedPart3D.H"

namespace OOPSMP
{

	/// @cond
	/**
	*@brief Macro for class, class pointer, and const class pointer declarations
	*/
	ForwardClassDeclaration(ArticulatedWorkspace3D);
	/// @endcond

	/**
	*@brief Workspace consists of a collection of 3D static and moving parts
	*
	*@par Plug-and-play functionality:
	*  @code
	*  BeginImplementInstanceFactory(Workspace3D, WorkspaceFactory);
	*  EndImplementInstanceFactory(Workspace3D);
	*  @endcode        
	*/ 
	class ArticulatedWorkspace3D : public Workspace
	{
	public:
		
		/**
		*@brief Initialize data elements to appropriate default values
		*/
		ArticulatedWorkspace3D(void) : Workspace()
		{
		}

		/**
		*@brief Free the memory allocated to different data elements
		*/
		virtual ~ArticulatedWorkspace3D(void)
		{
		}
	};

	/**
	*@brief Macro for class container, e.g., get/set on class object
	*/  
	ClassContainer(ArticulatedWorkspace3D);

	/**
	*@brief Declare factory and specify in source file the functions that should
	*       be registered for plug-and-play functionality
	*/  
	DeclareInstanceFactory(ArticulatedWorkspace3D, WorkspaceFactory);
}

#endif








